﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition;
using System.Configuration;
using System.ComponentModel.Composition.Hosting;

namespace Com.LongER.Framework.Utils
{
    public class MessageUtil
    {
        /// <summary>
        /// 信息マスタデータストア
        /// </summary>
        internal IEnumerable<MessageInfo> Store { private get; set; }

        /// <summary>
        /// 信息マスタデータ取得用リポジトリー
        /// </summary>

        private IMessageRepository repository = new MessageRepository();

        private bool Loaded
        {
            get
            {
                return Store != null;
            }
        }

		private static MessageUtil self;

        static MessageUtil()
		{
            self = new MessageUtil();
		}

        private MessageUtil()
		{

		}

        private void Load()
        {
            Store = repository.GetData();
        }

        #region 取得信息主数据
        /// <summary>
        /// 取得信息主数据
        /// </summary>
        /// <param name="applicationName"></param>
        /// <param name="messageId"></param>
        /// <returns></returns>
        public MessageInfo GetItem(string moduleName, string messageId)
        {
            if (!Loaded) Load();
            return Store
                  .Where(x => x.ModuleName == moduleName)
                  .Where(x => x.MessageId == messageId)
                  .FirstOrDefault();
        }
        #endregion

        #region 取信息。
        /// <summary>
        /// 取信息。
        /// </summary>
        /// <param name="applicationName">处理名</param>
        /// <param name="messageId">信息ID</param>
        /// <returns>信息</returns>
        public static string GetMessage(string moduleName, string messageId)
        {
            return GetMessage(moduleName, messageId, new object[] { });
        }
        #endregion

        #region 信息のプレースホルダを引数の値に置換して取得します。
        /// <summary>
        /// 信息のプレースホルダを引数の値に置換して取得します。
        /// </summary>
        /// <param name="applicationName">处理名</param>
        /// <param name="messageId">信息ID</param>
        /// <param name="args">信息パラメーター</param>
        /// <returns>信息</returns>
        public static string GetMessage(string moduleName, string messageId, params object[] args)
        {
            var messageInfo = self.GetItem(moduleName, messageId);

            if (messageInfo == null)
            {
                 return String.Format(@"处理名={0}，信息ID={1}
信息不存在。请与系统管理者联系。", moduleName, messageId);
            }

            return String.Format(messageInfo.Message, args);
        }
        #endregion
    }
}
